package com.wxdc.nmgyt.nmgytwydc.dagger.component;

import android.app.Activity;
import android.util.DisplayMetrics;

import com.wxdc.nmgyt.nmgytwydc.activity.AddWzActivity;
import com.wxdc.nmgyt.nmgytwydc.activity.AuditBackDataActivity;
import com.wxdc.nmgyt.nmgytwydc.activity.LoginActivity;
import com.wxdc.nmgyt.nmgytwydc.activity.MainActivity;
import com.wxdc.nmgyt.nmgytwydc.activity.PhotoActivity;
import com.wxdc.nmgyt.nmgytwydc.activity.ToCommitDataActivity;
import com.wxdc.nmgyt.nmgytwydc.activity.WaitCommitActivity;
import com.wxdc.nmgyt.nmgytwydc.activity.WebActivity;
import com.wxdc.nmgyt.nmgytwydc.dagger.module.ActivityModule;
import com.wxdc.nmgyt.nmgytwydc.dagger.module.AppModule;
import com.wxdc.nmgyt.nmgytwydc.dagger.scope.ActivityScope;

import javax.inject.Inject;

import dagger.Component;

/**
 * Created by Administrator on 2018/4/20.
 *
 * Component依赖Component
 * 当我们其中一个Component跟另外一个Component所提供的依赖有重复的时候，
 * 我们没有必要完全再写一遍，一个Component是可以依赖另外一个依赖的，理解起来就像extends关键字
 * 有两种实现方式：
 *   a、dependence方式
 *       dependence实现方式总结：
 *       1、父Component中要显式的写出需要暴露可提供给子Component的依赖；
 *       2、子Component在注解中使用dependencies=来连接父Component；
 *       3、注意子Component实例化方式。
 */
/*
 * 1.将我们需要注入的对象的类的构造参数使用@Inject标注，告诉dagger2它可以实例化这个类；
 * 2.编写Component接口使用@Component进行标注，里面的void inject()的参数表示要将依赖注入到的目标位置
 * 3.使用android studio的Build菜单编译一下项目，使它自动生成我们编写的Component所对应的类，生成的类的名字的格式为 "Dagger+我们所定义的Component的名字"
 * 4.在需要注入的类中使用@Inject标注要注入的变量；然后调用自动生成的Component类的方法create()或builder().build()，然后inject到当前类；在这之后就可以使用这个@Inject标注的变量了
*/

@ActivityScope
@Component(dependencies = AppComponent.class,modules = ActivityModule.class)
public interface ActivityComponent {
    Activity getActivity();
    void Inject(MainActivity mainActivity);
    void Inject(LoginActivity loginActivity);
    void Inject(PhotoActivity photoActivity);
    void Inject(ToCommitDataActivity toCommitDataActivity);
    void Inject(WebActivity webActivity);
    void Inject(AddWzActivity addWzActivity);
    void Inject(WaitCommitActivity waitCommitActivity);
    void Inject(AuditBackDataActivity auditBackDataActivity);
}
